﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using HtmlAgilityPack;
using Guline.Iuh.TichLuy.Models;
namespace Guline.Iuh.TichLuy.Excute
{
    public class Calculator
    {
        private HtmlAgilityPack.HtmlDocument docs;
        public List<Models.MonHocCal> DanhSachMon { get; set; }
        public Models.SinhVienCal sinhvien { get; set; }
        public double TL4 { get; set; }
        public double TL10 { get; set; }
        public bool DaDanhGiaMonHoc { get; set; }

        public int SMGioi { get; set; }
        public int SMKha { get; set; }
        public int SMTB { get; set; }
        public int SMYeu { get; set; }
        public int SMKem { get; set; }

        public int SMChuaCoDiem { get; set; }
        public int SMBoChon { get; set; }
        public int SMChungChi { get; set; }
        public int SMTinhDiem { get; set; }
        public string gethtmlBangDiem()
        {
           var divresult = this.docs.DocumentNode.SelectSingleNode("//div[@id='MainContent_divKetQua']");
            return divresult.InnerHtml;
        }
        public Calculator(HtmlDocument htdocs,string masv)
        {

            this.docs = htdocs;
            DaDanhGiaMonHoc = true;
            sinhvien = new SinhVienCal();
            DanhSachMon = new List<MonHocCal>();
            setSinhvien(htdocs);
            sinhvien.MaSV = masv;
            TL10 = 0;
            TL4 = 0;

            SMBoChon = 0; SMChuaCoDiem = 0; SMChungChi = 0; SMGioi = 0; SMKem = 0; SMKha = 0; SMTB = 0; SMYeu = 0; SMTinhDiem = 0;
            SetdsMon(htdocs);
            
        }
        public Calculator(HtmlDocument htdocs)
        {
         
          
            DaDanhGiaMonHoc = true;
            sinhvien = new SinhVienCal();
            DanhSachMon = new List<MonHocCal>();
            setSinhvien(htdocs);
            TL10 = 0;
            TL4 = 0;
            
            SMBoChon = 0; SMChuaCoDiem = 0; SMChungChi = 0; SMGioi = 0; SMKem = 0; SMKha = 0; SMTB = 0; SMYeu = 0; SMTinhDiem = 0;
            SetdsMon(htdocs);
        }
        private void setSinhvien(HtmlDocument htdocs)
        {
            ///////////////////////////////////////////////////Begin build sinhvien

            HtmlNode htmlTbinfo = htdocs.GetElementbyId("tableInfo");
            IEnumerable<HtmlNode> htmlTrs = htmlTbinfo.Elements("tr");
            int htmlTrsCount = htmlTrs.Count();// dem so cot trong bang.
            string[] Sudentinfo = new string[6];
            for (int i = 0; i < 6; i++)
            {
                IEnumerable<HtmlNode> htmlTDs = htmlTrs.ElementAt(i).Elements("td");
                Sudentinfo[i] = htmlTDs.ElementAt(1).InnerText;
            }
            // xay dung cac thong tin
            
            sinhvien.ChuyenNganh = Sudentinfo[2];
            sinhvien.HoTen = Sudentinfo[0];
            sinhvien.Bac = Sudentinfo[4];
            sinhvien.KhoaHoa = Sudentinfo[3];
            sinhvien.LopHoc = Sudentinfo[1];
            sinhvien.LoaiHinh = Sudentinfo[5];
            //xay dung Hinh
            //HtmlNode htmlHinh = htmlTbinfo.SelectSingleNode("//td[@class='MainContent_divKetQua']");
            sinhvien.Hinh = "";
            //xay dung masinhvien
            
            sinhvien.MaSV ="";
            ///////////////////////////////////////////////////END build sinhvien
        }
        
        private void SetdsMon(HtmlDocument htdocs)
        {
            try
            {
                HtmlNode htmldivDiem = htdocs.GetElementbyId("MainContent_divKetQua");
                HtmlNode htmlTbDiem = htmldivDiem.Element("table");
                IEnumerable<HtmlNode> htmlTrs = htmlTbDiem.Elements("tr");
                MonHocCal a;//biến tạm để lưu điểm từng môn

                int htmltrsCount = htmlTrs.Count();//đếm số dòng trong bảng kết quả
                int tempTDcount = 0;// biến lưu số cột trong 1 dòng
                //double TongDiemTichLuyHe10 = 0, TongDiemTichluyHe4 = 0;
                for (int i = 2; i < htmltrsCount; i++)
                {
                     IEnumerable<HtmlNode> htmlTds = htmlTrs.ElementAt(i).Elements("td");// lấy những tập hợp các cột trong dòng i
                    tempTDcount = htmlTds.Count();//đếm sô cột trong 1 dòng i.
                    if (tempTDcount > 1) // nếu số cột trong dòng i lớn hơn 1  thì dòng i sẽ chứa kết quả học tập của 1 môn 
                    {
                        a = new MonHocCal();
                        a.MaHP = htmlTds.ElementAt(2).InnerText;//mã học phần lấy ở cột thứ 2
                        a.TenHP = htmlTds.ElementAt(1).InnerText;// tên môn học ở cột thứ 1
                        a.SoTC = int.Parse(htmlTds.ElementAt(3).InnerText);//số tìn chỉ của môn này -cột 3
                        a.GhiChu = htmlTds.ElementAt(16).InnerText;
                        if (!string.IsNullOrEmpty(htmlTds.ElementAt(14).InnerHtml) && htmlTds.ElementAt(14).InnerHtml != "&nbsp;")
                        {
                            a.DiemCK = double.Parse(htmlTds.ElementAt(14).InnerText);
                        }
                        else if (!string.IsNullOrEmpty(htmlTds.ElementAt(15).InnerHtml) && htmlTds.ElementAt(15).InnerHtml != "&nbsp;")
                        {
                            a.DiemCK = double.Parse(htmlTds.ElementAt(15).InnerText);
                        }
                        else
                        {
                            a.DiemCK = -1;
                        }
                        //xet dieukien
                        if (a.TenHP == "Giáo dục thể chất" || a.TenHP == "Giáo dục quốc phòng" || a.TenHP == "Chứng chỉ B tin học" || a.TenHP == "Chứng chỉ C ngoại ngữ" || a.TenHP == "Giáo dục quốc phòng LT" || a.TenHP == "Giáo dục quốc phòng TH" || a.TenHP == "Giáo dục thể chất 1" || a.TenHP == "Giáo dục thể chất 2" || a.TenHP == "Chứng chỉ B ngoại ngữ" || a.TenHP == "Chứng chỉ tin học")
                        {
                            a.TinhTrang = 1;
                            SMChungChi += 1;
                        }
                        else if (a.DiemCK == -1)
                        {
                            a.TinhTrang = 2;
                            SMChuaCoDiem += 1;
                        }
                        else if (a.DiemCK < 4)
                        {
                            a.TinhTrang = 3;
                          
                        }
                        else
                        {
                            //a.TinhTrang = 0;//tính điểm bình thường
                            SMTinhDiem += 1;
                            if (a.DiemCK >= 8.5)
                            {
                                a.DiemHe4 = 4;
                                SMGioi += 1;
                                a.TinhTrang = 9;//gioi
                            }
                            else if (a.DiemCK >= 7)
                            {
                                a.DiemHe4 = 3;
                                SMKha += 1;
                                a.TinhTrang = 8;//kha
                            }
                            else if (a.DiemCK >= 5.5)
                            {
                                a.DiemHe4 = 2;
                                SMTB += 1;
                                a.TinhTrang = 7;//tb
                            }
                            else if (a.DiemCK >= 4)
                            {
                                a.DiemHe4 = 1;
                                SMYeu += 1;
                                a.TinhTrang = 6;//tb yeu
                            }
                            else 
                            {
                                a.DiemHe4 = 0;
                                SMKem += 1;
                                a.TinhTrang = 5;//yeu
                            }
                           
                        }
                        
                        this.DanhSachMon.Add(a);
                    }
                }
            }
            catch
            {
                this.DaDanhGiaMonHoc = false;
            }
        }
        public void buildtichluy()
        {
            int TongTCTinhDiem = 0;
            double TongDiemHe10=0, TongDiemHe4=0,TL1monhe10,TL1monhe4;
            foreach (MonHocCal a in DanhSachMon)
            {
                if (a.TinhTrang >5)
                {
                    TL1monhe10 = a.DiemCK * a.SoTC;
                    TongDiemHe10 += TL1monhe10;

                    TL1monhe4 = a.SoTC * a.DiemHe4;
                    TongDiemHe4 += TL1monhe4;

                    TongTCTinhDiem += a.SoTC;
                }
            }
            this.TL10 = Math.Round(TongDiemHe10 /TongTCTinhDiem, 5);
            this.TL4 = Math.Round(TongDiemHe4 / TongTCTinhDiem, 5);
        }
    }
}